home *** CD-ROM | disk | FTP | other *** search
/ Mac Mania 6 / MacMania 6.toast / / Multimedia & Desktop / sk8 / SK8InJava / Code / Collections / CharacterCollection.java next >
Encoding:
Java Source  |  1997-02-27  |  3.5 KB  |  154 lines  |  [TEXT/CWIE]

  1. /*  SK8 © 1997 Apple Computer, Inc.
  2.     This code is protected under the current SK8 License
  3.     See http://sk8.research.apple.com/ for more information
  4.     Apple Research Laboratories
  5. */
  6.  
  7.  
  8. public class charactercollection extends text {
  9.  
  10.     /**
  11.      ** Constructors
  12.      **/
  13.      public charactercollection(StringBuffer inString){
  14.          super(inString);
  15.      }
  16.      
  17.      public charactercollection(String inString){
  18.          super(inString);
  19.      }
  20.          
  21.     
  22.     
  23.     /**
  24.      ** collection protocol stuff...
  25.      **/    
  26.      
  27.      
  28.      
  29.     /**
  30.      ** initialvisitstate
  31.      **/    
  32.      public visitstate initialvisitstate() {
  33.          return new charactervisitstate(this, 1); //temporarily returning CharacterVSs,
  34.      }
  35.          
  36.              
  37.     /**
  38.      ** isfinalvisitstate
  39.      **/        
  40.      public boolean isfinalvisitstate(visitstate inState) {
  41.         checkVisitStateType(inState);
  42.         return (((textvisitstate)inState).mCurrentPosition + 1 >= stringLength());
  43.      }
  44.      
  45.  
  46.     /**
  47.      ** succeedingvisitstate
  48.      **/
  49.      public visitstate succeedingvisitstate(visitstate inState) {
  50.         checkVisitStateType(inState);
  51.         
  52.         if (isfinalvisitstate(inState))
  53.           return null; //    throw new collectionexception("Can't get succeeding state from a final state");
  54.         
  55.         ((textvisitstate)inState).mCurrentPosition ++;
  56.         return inState;
  57.     }
  58.     
  59.     
  60.     /**
  61.      ** elementatvisitstate
  62.      **/
  63.      public Object elementatvisitstate(visitstate inState) {
  64.         checkVisitStateType(inState);
  65.         return new Character(getNthChar(
  66.                         ((textvisitstate)inState).mCurrentPosition));
  67.     }
  68.     
  69.     
  70.     /**
  71.      ** setelementatvisitstate
  72.      **/
  73.      public void    setelementatvisitstate(visitstate inState, Object inElement) {
  74.         checkVisitStateType(inState);
  75.         
  76.         char ch = '\u0000'; //so we don't get "maybe uninitialized" error
  77.         boolean inputIsOK = false;
  78.         
  79.         if (inElement instanceof Character){
  80.             ch = ((Character)inElement).charValue();
  81.             inputIsOK = true;
  82.         }
  83.             
  84.         if ((inElement instanceof String) && (((String)inElement).length()) == 1) {
  85.             ch = ((String)inElement).charAt(0);
  86.             inputIsOK = true;
  87.         }
  88.         
  89.         if (! inputIsOK)
  90.             throw new IllegalArgumentException("Incorrect value type");
  91.             
  92.         setNthChar(((textvisitstate)inState).mCurrentPosition, ch);
  93.     }
  94.                                     
  95.     
  96.     /**
  97.      ** removevisitstate
  98.      **/
  99.      public void removevisitstate(visitstate inState) {
  100.         checkVisitStateType(inState);
  101.         int pos = ((textvisitstate)inState).mCurrentPosition;
  102.         removeChars(pos, pos + 1);
  103.     }
  104.                                     
  105.     
  106.     /**
  107.      ** insertatvisitstate
  108.      **/
  109.      public visitstate insertatvisitstate(visitstate inState, Object inElement, boolean inInsertAfter){
  110.         if (!(inElement instanceof Character))
  111.              throw new IllegalArgumentException ("Can set elements of charactercollection only to Characters");
  112.              
  113.         int insertionIndex = 0;
  114.         if (inState != null) {
  115.             checkVisitStateType(inState);
  116.             
  117.             insertionIndex = ((textvisitstate)inState).mCurrentPosition;
  118.             if (inInsertAfter) {
  119.                 insertionIndex++;
  120.             }
  121.         }
  122.         
  123.         insertCharacter(insertionIndex, ((Character)inElement).charValue() );    
  124.         return inState;
  125.     } 
  126.     
  127.     
  128.     /**
  129.      ** indexatvisitstate
  130.      **/
  131.      public int indexatvisitstate(visitstate inState){
  132.         checkVisitStateType(inState);
  133.         return (((textvisitstate)inState).mCurrentPosition + 1);    
  134.         //java starts at 0, the protocol starts at 1
  135.     }
  136.                                     
  137.     
  138.     /**
  139.      ** visitstateatindex
  140.      **/
  141.     public visitstate visitstateatindex(int inIndex){
  142.         return new charactervisitstate (this, inIndex);
  143.     }
  144.     
  145.     
  146.     /** 
  147.      ** checkVisitStateType --protected--
  148.      **/
  149.      protected void checkVisitStateType(visitstate inState){
  150.         if (! (inState instanceof charactervisitstate))
  151.             throw new IllegalArgumentException("Expecting a charactervisitstate, not a " 
  152.                     + inState.getClass());
  153.     }
  154. }